package saa.dominio.periodo;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import saa.dominio.disciplina.Disciplina;
import saa.dominio.periodo.tempo.Semestre;

@Entity
@NamedQueries({
    @NamedQuery(name = "OfertaDisciplinas", query = "SELECT o FROM OfertaDisciplina o"),
    @NamedQuery(name = "OfertaDisciplina.id", query = "SELECT o FROM OfertaDisciplina o WHERE o.id = :id"),
    @NamedQuery(name = "OfertaDisciplina.disciplina.id", query = "SELECT o FROM OfertaDisciplina o WHERE o.disciplina.id = :id"),
    @NamedQuery(name = "OfertaDisciplina.disciplina.curso.id", query = "SELECT o FROM OfertaDisciplina o WHERE o.disciplina.curso.id = :id")})
public class OfertaDisciplina implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(nullable = false)
    @ManyToOne
    private Disciplina disciplina;

    @Column(nullable = false)
    @ManyToOne
    private Semestre semestre;

    @OrderBy(value = "bimestre")
    @OneToMany(mappedBy = "disciplina")
    private List<UnidadeDisciplina> unidades;

    public OfertaDisciplina() {
        super();
    }

    public OfertaDisciplina(Disciplina disciplina, Semestre semestre, List<UnidadeDisciplina> unidades) {
        this.disciplina = disciplina;
        this.semestre = semestre;
        this.unidades = unidades;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Disciplina getDisciplina() {
        return disciplina;
    }

    public void setDisciplina(Disciplina disciplina) {
        this.disciplina = disciplina;
    }

    public Semestre getSemestre() {
        return semestre;
    }

    public void setSemestre(Semestre semestre) {
        this.semestre = semestre;
    }

    public List<UnidadeDisciplina> getUnidades() {
        return unidades;
    }

    public void setUnidades(List<UnidadeDisciplina> unidades) {
        this.unidades = unidades;
    }

    public void addUnidade(UnidadeDisciplina unidade) {
        this.unidades.add(unidade);
    }
}
